package com.eptok.yspay.opensdkjava.pojo.content;

import com.eptok.yspay.opensdkjava.util.DateUtil;
import lombok.Data;
import lombok.experimental.Accessors;

import java.io.Serializable;
import java.util.HashMap;
import java.util.Map;

/**
 * @Author YIFan
 * @Date 2022/4/11 15:59
 * @Version 1.0
 * @DESC //TODO
 */
@Data
@Accessors(chain = true)
public class AlipayLifeContent implements Serializable {

    /**商品的标题/交易标题/订单标题/订单关键字等。该参数最长为250个汉字  Y*/
    private String subject = "支付宝生活服务窗支付接口测试";
    private String out_trade_no = DateUtil.getDateNowYmd() + DateUtil.getRandom(6);
    /**该笔订单的资金总额 Y*/
    private String total_amount = "0.01";
    /**收款商户号 Y*/
    private String seller_id = "826521779410035";
    /**收款商户号对应商户名称 Y*/
    private String seller_name = "武汉球之道科技有限公司（收银机）";
    /**设置未付款交易的超时时间，一旦超时，该笔交易就会自动被关闭，取值范围：1m～15d。m-分钟，h-小时，d-天。该参数数值不接受小数点，如1.5h，可转换为90m。注意：设置了未付款交易超时时间的情况下，若我司在限定时间内没有收到成功支付通知，则会关闭交易，关闭后该笔交易若付款方支付成功的情况下，会自动原路退款至付款方。96h  	Y*/
    private String timeout_express = "6h";
    /**公用回传参数 商户自定义数据域，原样返回 N*/
    private String extra_common_param_jsonStr = "";
    /**业务代码 ，请联系银盛客户经理获取。注意：业务代码非固定值，不同到账方式需要传不同的业务代码 Y*/
    private String business_code = "00510080";
    /**买家支付宝账号，和buger_id不能同时为空 N*/
    private String buyer_logon_id = "233423423";//
    /**买家支付宝用户ID，和buyer_logon_id不能同时为空。buyer_id获取方法：https://doc.open.alipay.com/doc2/detail.htm?spm=a219a.7629140.0.0.8ujLD6&treeId=115&articleId=104114&docType=1通过网页授权获取用户信息，同步响应结果中的user_id对应文档中的buyer_id。*/
    private String buyer_id = "233423423";
    /**订单所属省编号（省市编号必须同时为空或者同时非空、并且需要符合层级关系）（特殊可空）*/
    private String province = null;//  //
    /**订单所属市编号（省市编号必须同时为空或者同时非空、并且需要符合层级关系）（特殊可空）*/
    private String city = null;
    /**是否限制信用卡。值为1表示禁用信用卡，0或为空表示不限制,2禁用花呗，3禁用花呗分期，4禁用所有信用支付类型 N*/
    private String limit_credit_pay = "0";
    /**花呗分期期数,仅在支付宝支付的时候生效,目前期数支持6,12 N*/
    private String hb_fq_num = "6";
    /** 失败通知地址  N*/
    private String fail_notify_url = "";

//    private String goods_id = ""; // 商品编号  Y
//    private String alipay_goods_id = ""; // 支付宝定义的统一商品编号  N
//    private String goods_name = ""; // 	营销单品名称 Y
//    private String quantity = ""; // 	营销单品数量 不超过10位的正整数 Y


    public static Map<String, Object> bizContent(AlipayLifeContent content){

        Map<String, Object> bizContent = new HashMap<>();
        //商户生成的订单号，生成规则前8位必须为交易日期，如20180525，范围跨度支持包含当天在内的前后一天，且只能由大小写英文字母、数字、下划线及横杠组成
        bizContent.put("out_trade_no", content.getOut_trade_no());
        //商户日期(该参数做交易与查询时需要一致) 该日期需在当日的前后一天时间范围之内
        bizContent.put("shopdate",  DateUtil.getDateNowYmd());
        //商品的标题/交易标题/订单标题/订单关键字等。该参数最长为250个汉字
        bizContent.put("subject",content.getSubject());
        //该笔订单的资金总额，单位为RMB-Yuan。取值范围为[0.01，100000000.00]，精确到小数点后两位。Number(10,2)指10位长度，2位精度
        bizContent.put("total_amount", content.getTotal_amount());
        //支持币种：CNY(人民币)、HKD(港币)、USD(美元)、EUR(欧元)、JPY(日元)
        //注:不填默认是CNY(人民币)，如是非跨境商户，币种不能填HKD(港币)、USD(美元)、EUR(欧元)、JPY(日元)中的任意一种外币币种
        bizContent.put("currency", "CNY");
        //收款方银盛支付用户号
        bizContent.put("seller_id", content.getSeller_id());
        //收款方银盛支付客户名
        bizContent.put("seller_name", content.getSeller_name());
        //设置未付款交易的超时时间，一旦超时，该笔交易就会自动被关闭。
        //(需申请业务权限，权限未开通情况下该参数不生效，默认未付款交易的超时时间为7d)取值范围：1m～15d。m-分钟，h-小时，d-天。该参数数值不接受小数点，如1.5h，可转换为90m。
        //注意：设置了未付款交易超时时间的情况下，若我司在限定时间内没有收到成功支付通知，则会关闭交易，关闭后该笔交易若付款方支付成功的情况下，会自动原路退款至付款方
        bizContent.put("timeout_express",content.getTimeout_express());
        //业务扩展参数，一个json字符串,order_mode订单模式，暂时可选的值为:00 代表购物车模式;seller_list参与分账的收款方信息数组，每个元素包含seller_id收款方银盛支付用户号。
        //实时分账业务，order_mode和seller_list均不能为空，order_mode的值必须为00
//        bizContent.put("extend_params","{\"cartTYpe\": \"00\",\"order_mode\": \"01\",\"seller_list\": [{\"seller_id\": \"123\"},{\"seller_id\": \"456\"}]}");
        //公用回传参数
        bizContent.put("extra_common_param", content.getExtra_common_param_jsonStr());
        //业务代码
        bizContent.put("business_code", content.getBusiness_code());
        //买家支付宝账号，和buger_id不能同时为空(可空)
        bizContent.put("buyer_logon_id", content.getBuyer_logon_id());
        //买家支付宝用户ID，和buyer_logon_id不能同时为空。
        //buyer_id获取方法：https://doc.open.alipay.com/doc2/detail.htm?spm=a219a.7629140.0.0.8ujLD6&treeId=115&articleId=104114&docType=1通过网页授权获取用户信息，同步响应结果中的user_id对应文档中的buyer_id
        bizContent.put("buyer_id", content.getBuyer_id());


        //=================二级商户信息, Json格式=================
        //如果有值则二级商户信息都不能为空，如果没值则都不能有值
//        JSONObject subMerchantInfoJson = new JSONObject();
//        subMerchantInfoJson.put("merName","");//二级商户名称,支持25个中文
//        subMerchantInfoJson.put("merShortName","");//二级商户简称,支持25个中文
//        subMerchantInfoJson.put("merAddr","");//二级商户地址,支持100个中文
//        subMerchantInfoJson.put("telephone","");//固定电话/手机号码二选一
//        subMerchantInfoJson.put("merNo","");//二级商户编号
//        subMerchantInfoJson.put("category","");//类目，按附件内容输入类目编号
//        subMerchantInfoJson.put("mrchntCertId","");//身份证号,只支持身份证格式(DES加密，密钥为商户号前8位，不足8位在商户号前补空格)
        //二级商户json格式
//        bizContent.put("sub_merchant",subMerchantInfoJson);


        //=================收货人信息json格式(可空)=================
//        JSONObject consigneeInfoJson = new JSONObject();
//        subMerchantInfoJson.put("consigneeName","");//收货人姓名
//        subMerchantInfoJson.put("consigneeAddr","");//收货地址
//        subMerchantInfoJson.put("transportationInfo","");//物流配送信息（物流名称+订单号）
//        subMerchantInfoJson.put("commodityName","");//商品名称
//        subMerchantInfoJson.put("commodityNumber","");//商品数量
//        //收货人信息json格式
//        bizContent.put("consignee_info",consigneeInfoJson);


        //订单所属省编号（省市编号必须同时为空或者同时非空、并且需要符合层级关系）（特殊可空）
        bizContent.put("province",content.getProvince());
        //订单所属市编号（省市编号必须同时为空或者同时非空、并且需要符合层级关系）（特殊可空）
        bizContent.put("city",content.getCity());
        //是否限制信用卡。值为1表示禁用信用卡，0或为空表示不限制,2禁用花呗，3禁用花呗分期，4禁用所有信用支付类型
        bizContent.put("limit_credit_pay",content.getLimit_credit_pay());
        //花呗分期期数,仅在支付宝支付的时候生效,目前期数支持6,12
        bizContent.put("hb_fq_num",content.getHb_fq_num());
        //是否允许多次支付,Y：允许;N：不允许（参数为空或者Y时，默认该笔订单交易状态非成功状态时，支持选择其他支付方式继续付款，适用于收银台模式。 当为N时表示该笔订单交易状态为失败状态时，不支持选择其他支付方式继续付款，收银台模式下建议该参数为空）
        bizContent.put("allow_repeat_pay","N");
        //失败通知地址（交易状态为失败时，银盛支付服务器主动通知商户网站里指定的页面http路径，支持多个url进行异步通知，多个url用分隔符“,”分开，格式如：url1,url2,url3）注：只有不允许重复支付的交易才会通知
        bizContent.put("fail_notify_url",content.getFail_notify_url());


        //================支付宝营销单品详情列表(可空	)=================
//        JSONArray aliGoodsDetails = new JSONArray();
//        //================支付宝营销单品详情aliGoodsDetail=================
//        JSONObject aliGoodsDetail = new JSONObject();
//        aliGoodsDetail.put("goods_id","Shouji_abcef_001-001");//营销单品编号
//        aliGoodsDetail.put("alipay_goods_id","1001");//营销单品支付宝侧编号
//        aliGoodsDetail.put("goods_name","手机");//营销单品名称
//        aliGoodsDetail.put("quantity",1000);//数量，只能是正整数
//        aliGoodsDetail.put("price",100.20);//[0,999999999] 左闭右闭区间，小数点后最多允许两位
//        aliGoodsDetail.put("goods_category","");//营销单品类目
//        aliGoodsDetail.put("categories_tree","");//营销单品类目树
//        aliGoodsDetail.put("body","");//营销单品描述
//        aliGoodsDetail.put("show_url","");//营销单品展示地址
//        aliGoodsDetails.add(aliGoodsDetail);
        //支付宝营销单品详情列表
//        bizContent.put("aliGoodsDetails",aliGoodsDetails);

//        bizContent.put("submer_ip","112.112.112.112");//子商户ip(可空	)


        return bizContent;
    }
}
